// ==++==
//
//   
//    Copyright (c) 2006 Microsoft Corporation.  All rights reserved.
//   
//    The use and distribution terms for this software are contained in the file
//    named license.txt, which can be found in the root of this distribution.
//    By using this software in any fashion, you are agreeing to be bound by the
//    terms of this license.
//   
//    You must not remove this notice, or any other, from this software.
//   
//
// ==--==
#include "precomp.h"
#ifdef _MSC_VER
#pragma hdrstop
#endif

//
// Map to determine characteristics of text
//
UCHAR   Charmap[CHARMAP_SIZE] = {
LX_EOS,         // 0x0, <end of string marker>
LX_ILL,         // 0x1
LX_ILL,         // 0x2
LX_ILL,         // 0x3
LX_ILL,         // 0x4
LX_ILL,         // 0x5
LX_ILL,         // 0x6
LX_ILL,         // 0x7
LX_ILL,         // 0x8
LX_WHITE,       // <horizontal tab>
LX_NL,          // <newline>
LX_WHITE,       // <vertical tab>
LX_WHITE,       // <form feed>
LX_CR,          // <really a carriage return>
LX_ILL,         // 0xe
LX_ILL,         // 0xf
LX_ILL,         // 0x10
LX_ILL,         // 0x11
LX_ILL,         // 0x12
LX_ILL,         // 0x13
LX_ILL,         // 0x14
LX_ILL,         // 0x15
LX_ILL,         // 0x16
LX_ILL,         // 0x17
LX_ILL,         // 0x18
LX_ILL,         // 0x19
LX_EOS,         // 0x1a, ^Z
LX_ILL,         // 0x1b
LX_ILL,         // 0x1c
LX_ILL,         // 0x1d
LX_ILL,         // 0x1e
LX_ILL,         // 0x1f
LX_WHITE,       // 0x20
LX_OPERATOR,    // !
LX_DQUOTE,      // "
LX_POUND,       // #
LX_ASCII,       // $
LX_OPERATOR,    // %
LX_OPERATOR,    // &
LX_SQUOTE,      // '
LX_OPERATOR,    // (
LX_OPERATOR,    // )
LX_OPERATOR,    // *
LX_OPERATOR,    // +
LX_COMMA,       // ,
LX_MINUS,       // -
LX_DOT,         // .
LX_OPERATOR,    // /
LX_NUMBER,      // 0
LX_NUMBER,      // 1
LX_NUMBER,      // 2
LX_NUMBER,      // 3
LX_NUMBER,      // 4
LX_NUMBER,      // 5
LX_NUMBER,      // 6
LX_NUMBER,      // 7
LX_NUMBER,      // 8
LX_NUMBER,      // 9
LX_COLON,       // :
LX_SEMI,        // ;
LX_OPERATOR,    // <
LX_OPERATOR,    // =
LX_OPERATOR,    // >
LX_EOS,         // ?
LX_EACH,        // @
LX_ID,          // A
LX_ID,          // B
LX_ID,          // C
LX_ID,          // D
LX_ID,          // E
LX_ID,          // F
LX_ID,          // G
LX_ID,          // H
LX_ID,          // I
LX_ID,          // J
LX_ID,          // K
LX_ID,          // L
LX_ID,          // M
LX_ID,          // N
LX_ID,          // O
LX_ID,          // P
LX_ID,          // Q
LX_ID,          // R
LX_ID,          // S
LX_ID,          // T
LX_ID,          // U
LX_ID,          // V
LX_ID,          // W
LX_ID,          // X
LX_ID,          // Y
LX_ID,          // Z
LX_OBRACK,      // [
LX_EOS,         // \ (backslash)
LX_CBRACK,      // ]
LX_OPERATOR,    // ^
LX_MACRO,       // _
LX_ASCII,       // `
LX_ID,          // a
LX_ID,          // b
LX_ID,          // c
LX_ID,          // d
LX_ID,          // e
LX_ID,          // f
LX_ID,          // g
LX_ID,          // h
LX_ID,          // i
LX_ID,          // j
LX_ID,          // k
LX_ID,          // l
LX_ID,          // m
LX_ID,          // n
LX_ID,          // o
LX_ID,          // p
LX_ID,          // q
LX_ID,          // r
LX_ID,          // s
LX_ID,          // t
LX_ID,          // u
LX_ID,          // v
LX_ID,          // w
LX_ID,          // x
LX_ID,          // y
LX_ID,          // z
LX_OBRACE,      // {
LX_OPERATOR,    // |
LX_CBRACE,      // }
LX_OPERATOR,    // ~
LX_ILL,         // 0x7f
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO, LX_MACRO,
};

void initCharmap(void)
{
    int i;
    for (i = 0; i <= 127; i++) {

        // Initialize valid macro chars (besides '_' and >= 128)
        if (_istalnum(i)) {
            Charmap[i] |= LX_MACRO;
        }
    }
}
